package net.lesscoding.session;

import io.netty.channel.Channel;

import java.util.List;
import java.util.Set;

/**
 * @author eleven
 * @date 2024/10/31 14:37
 * @apiNote
 */
public interface GroupSession {

    /**
     * 创建群组
     *
     * @param name    群组名
     * @param members 成员
     * @return Group   群组
     */
    Group createGroup(String name, Set<String> members);

    /**
     * 加入群组
     *
     * @param name   群组名
     * @param member 成员
     * @return Group   群组
     */
    Group joinGroup(String name, String member);

    /**
     * 退出群组
     *
     * @param name   群组名
     * @param member 成员
     * @return Group   群组
     */
    Group quitGroup(String name, String member);

    /**
     * 解散群组
     *
     * @param name 群组名
     * @return Group   群组
     */
    Group dissolveGroup(String name);

    /**
     * 获取群组
     *
     * @param name 群组名
     * @return Group   群组
     */
    Group getGroup(String name);

    /**
     * 获取群组成员
     *
     * @param name 群组名
     * @return Set<String>  成员
     */
    Set<String> getGroupMembers(String name);

    /**
     * 获取群组成员通道
     *
     * @param name 群组名
     * @return List<Channel>  成员通道
     */
    List<Channel> getMembersChannel(String name);


    /**
     * 获取群组列表
     *
     * @return Set<String>  群组列表
     */
    Set<String> getGroupList();


    Group removeMember(String name, String member);


}
